package org.summer.common.rule;

import java.util.Collection;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @version 1.0.0
 * @author wangjunjie
 * @data 2024-11-4
 * 缓存处理接口
 * @param <T> 缓存处理数据类型
 */
public interface CacheHandler <T>{
    /**
     * 保存数据到缓存中
     * @param key 保存缓存的键
     * @param value 保存缓存的值
     */
    void save(String key, T value);
    /**
     * 保存数据到缓存中
     * @param key 保存缓存的键
     * @param value 保存缓存的值
     * @param timeout 缓存超时时间
     * @param timeUnit 缓存超时时间单位
     */
    void save(String key, T value, long timeout, TimeUnit timeUnit);
    /**
     * 缓存集合数据
     * @param key 缓存键
     * @param value 缓存值集合
     */
    void saveList(String key, Collection<T> value);
    /**
     * 缓存集合数据
     * @param key 缓存键
     * @param value 环境的集合数据值
     * @param timeout 缓存过期时间
     * @param timeUnit 缓存过期时间单位
     */
    void saveList(String key, Collection<T> value, long timeout, TimeUnit timeUnit);
    /**
     * 根据缓存的键读取缓存值
     * @param key 缓存键
     * @return 缓存值
     */
    T find(String key);
    /**
     * 读取缓存中集合数据
     * @param key 缓存键
     * @return 缓存中集合数据
     */
    List<T> findList(String key);
    /**
     * 重命名缓存键
     * @param oldKey 旧状态缓存键
     * @param newKey 新状态环境键
     */
    void rename(String oldKey, String newKey);
    /**
     * 检查缓存键是否存在
     */
    Boolean isExist(String key);
    /**
     * 删除缓存键
     */
    Boolean deleteKey(String key);
    /**
     * 批量删除缓存键
     * @param keys 缓存键集合
     */
    Long deleteKeys(Collection<String> keys);
    /**
     * 扫描缓存中的键
     * @param pattern 匹配模式
     */
    List<String> scanKey(String pattern);
}
